#include<unistd.h>
#include"Sem.hpp"
#include"RingQueue.hpp"

void*productor(void*args)
{
    RingQueue<int>*rq=static_cast<RingQueue<int>*>(args);
    int data=1;
    while(true)
    {
        std::cout<<"生产了一个数据："<<data<<std::endl;
        rq->Equeue(data);
        data++;
    }

    return nullptr;
}

void*consumer(void*args)
{
    RingQueue<int>*rq=static_cast<RingQueue<int>*>(args);
    int data=0;
    while(true)
    {
        sleep(1);
        rq->Pop(&data);
        std::cout<<"消费了一个数据："<<data<<std::endl;
    }
    return nullptr;
}

int main()
{
    
    RingQueue<int>rq(5);
    pthread_t csm,pdt;
    pthread_create(&csm,nullptr,consumer,&rq);
    pthread_create(&pdt,nullptr,productor,&rq);


    pthread_join(csm,nullptr);
    pthread_join(pdt,nullptr);

    return 0;
}